package com.feicheng.service;

import com.feicheng.common.result.ResultInfo;
import com.feicheng.persistence.entity.Permission;
import com.feicheng.persistence.entity.Role;

/**
 * <p>
 *  业务逻辑接口
 *  系统相关的服务
 * </p>
 *
 * @author cailongyang
 */
public interface IFSystemService {

    /**
     * 分页查询角色信息
     * @param roleName 检索条件：角色名
     * @param statu 检索条件：角色状态
     * @param currentPage 当前页
     * @param pageSize 每页条数
     * @return
     */
    public ResultInfo selectRoles(
            String roleName,
            Boolean statu,
            Integer currentPage,
            Integer pageSize
    );

    /**
     * 取得所有角色
     * @param statu 检索条件：角色状态
     * @return
     */
    public ResultInfo allRoles(Boolean statu);

    /**
     * 根据角色ID取得角色信息
     * @param roleCode 检索主键：角色Code
     * @return
     */
    public ResultInfo getRoleById(String roleCode);

    /**
     * 添加角色以及角色相关的权限
     * @param role 角色信息
     * @return
     */
    public ResultInfo addRole(Role role);

    /**
     * 更新角色以及角色相关的权限
     * @param role 角色信息
     * @return
     */
    public ResultInfo updateRole(Role role);

    /**
     * 删除角色信息
     * @param roleCode 删除主键：角色code
     * @return
     */
    public ResultInfo deleteRole(String roleCode);

    /**
     * 分页查询权限信息
     * @param name 检索条件： 权限名称
     * @param path 检索条件： 权限路径
     * @param statu 检索条件： 状态
     * @param pCode 检索条件：父级权限CODE
     * @param currentPage 当前页
     * @param pageSize 每页数量
     * @return
     */
    public ResultInfo getPermissions(
        String name,
        String path,
        Boolean statu,
        String pCode,
        Integer currentPage,
        Integer pageSize
    );

    /**
     * 取得所有权限信息
     * @param aFlg 检索条件：状态
     * @param pCode 检索条件：父级权限CODE
     * @return
     */
    public ResultInfo allPermissions(Boolean aFlg, String pCode);

    /**
     * 取得权限信息
     * @param code 检索主键：权限CODE
     * @return
     */
    public ResultInfo getPermission(String code);

    /**
     * 添加权限信息
     * @param permission 权限信息
     * @return
     */
    public ResultInfo addPermission(Permission permission);

    /**
     * 添加权限信息
     * @param permission 权限信息
     * @return
     */
    public ResultInfo updatePermission(Permission permission);

    /**
     * 删除权限信息
     * @param code 删除主键：权限code
     * @return
     */
    public ResultInfo deletePermission(String code);

}
